1
從玩具資料集到真實世界的混亂
EvoClass-AI002第5講
00:00

1. 搭建橋樑:資料載入基礎

深度學習模型依賴於乾淨且一致的資料,但現實世界中的資料集本質上是雜亂無章的。我們必須從預先打包的基準測試(如MNIST)轉向管理未結構化的資料來源,其中資料載入本身便是一個複雜的協調任務。此過程的基礎在於PyTorch專為資料管理設計的工具。

核心挑戰在於將儲存在磁碟上的原始、分散的資料(影像、文字、音訊檔案)轉換為高度組織化且標準化的PyTorch 張量格式GPU所期望的格式。這需要自訂邏輯來進行索引、載入、預處理,最後再進行批次化。

現實世界資料的關鍵挑戰

  • 資料混亂:資料分散於多個目錄中,通常僅由CSV檔案索引。
  • 需要預處理:影像可能需要調整大小、歸一化或增強,才能轉換為張量。
  • 效率目標:資料必須以優化、非阻塞的批次形式傳送到GPU,以最大化訓練速度。
PyTorch的解決方案:分離職責
PyTorch強調職責分離:Dataset負責「什麼」(如何存取單一樣本與標籤),而DataLoader則負責「如何」(高效批次化、打亂順序及多執行緒傳輸)。
data_pipeline.py
終端機bash — data-env
> 已準備就緒。點擊「執行」開始運行。
>
張量檢視器即時

執行程式碼以檢視活躍的張量
問題 1
PyTorch Dataset物件的主要功能是什麼?
將樣本組織成小批量並進行打亂。
定義取得單一個預處理後樣本的邏輯。
在模型內部執行矩陣乘法。
問題 2
哪一個 DataLoader參數可利用多個CPU核心進行平行載入資料?
device_transfer
batch_size
num_workers
async_load
問題 3
如果您的原始影像尺寸各不相同,哪個元件主要負責將它們調整為統一的尺寸(例如 $224 \times 224$)?
DataLoader的 collate_fn
GPU的專用影像處理器。
應用於Dataset的 __getitem__方法。
挑戰:自訂影像載入器藍圖
定義真實世界影像分類所需的結構。
您正在建立一個 CustomDataset,用於10,000張影像,這些影像由包含路徑與標籤的單一CSV檔案索引。
第一步
哪個必備方法必須回傳樣本總數?
解答:
__len__方法。
Concept: Defines the epoch size.
第二步
__getitem__(self, index)中,正確的操作順序為何?
解答:
1. 使用 index
2. 載入原始資料(例如影像)。
3. 套用必要的 transforms
4. 回傳處理後的張量與標籤。